//
//  main.m
//  OOP
//
//  Created by apple on 15/8/23.
//  Copyright (c) 2015年 戴维营. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Encapshlation.h"
#import "Human.h"
#import "Man.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
//OOP:一种将对象作为程序的基本单元，将程序和数据封装在一起，从而提高软件到重用性／灵活性和可拓展性等；

//        对象的三大特征：1、封装；2、继承；3、多态；
    
#if 0  //封装
        Encapshlation *p = [Encapshlation new];
        [p work];  //对行为进行封装，
        
//        对数据进行封装能够对数据进行保护，并且让开发者在修改这个类点时候不需要考虑它的使用细节；
        
#endif
        
#if 0  //继承
        
        Human *human = [[Human alloc] init];
        [human eat];
        
        Man *man = [[Man alloc] init];
        [man eat];
     
// 虽然Man这个类当中没有eat这个方法，但是它照样可以实现eat这个行为，那是因为它从它到父类Human那继承到了eat这个方法；
        
#endif
        
#if 0  // 多态：是面向对象编程的关键思想。当不同类具备相同名称的方法时，互换调用该方法产生不同的行为；
        Human *human = [Human new];
        [human sing];
        
        human = [Man new];
        [human sing];
//        [human say]编译时类型，在编译时检查该对象是否具有某种功能；
#endif
        
//        super用于在被覆盖的方法中调用该方法在父类中的实现；
        
//        @class关键字，用于前置申明一个类，在之后的使用中还是需要improt引入头文件，用于解决头文件循环包含以及提高编译速度；
    }
    return 0;
}
